package org.sage.sdk.dada.order.service;

import org.sage.sdk.dada.infrastructure.common.response.BaseResponse;
import org.sage.sdk.dada.infrastructure.common.response.result.*;
import org.sage.sdk.dada.infrastructure.dada.openapi.java.config.AppConfig;
import org.sage.sdk.dada.order.entity.*;

/**
 * @author 周广明
 * @version v1 2019/12/11 下午1:59
 */
public interface IDadaOrderManager {

    void setAppConfig(AppConfig appConfig);

    /**
     * 订单详情查询
     * <p>
     * 查询订单的相关信息以及骑手的相关信息，具体信息参见参数说明。
     *
     * @param model
     * @return
     */
    BaseResponse<QueryOrderDetailsResult> queryOrderDetails(QueryOrderDetails model);

    /**
     * 追加订单
     * <p>
     * 商户调用该接口将已发布的订单追加给指定的配送员,接口URL地址：/api/order/appoint/exist
     * <p>
     * 1. 追加的订单必须是该门店发出的处于待接单状态的订单
     * 2. 只能从符合条件的配送员列表选取配送员进行追加,参考查询追加配送员
     */
    BaseResponse<AdditionalOrdersResult> additionalOrders(AdditionalOrders model);

    /**
     * 新增配送单
     * <p>
     * (1) 接口调用URL地址：/api/order/addOrder。
     * (2) 在测试环境，使用统一商户和门店进行发单。其中，商户id：73753，门店编号：11047059。
     */
    BaseResponse<AddOrderResult> addOrder(AddOrder model);

    /**
     * 增加小费
     * <p>
     * 可以对待接单状态的订单增加小费。需要注意：订单的小费，以最新一次加小费动作的金额为准，故下一次增加小费额必须大于上一次小费额。
     * <p>
     * 接口调用URL地址：/api/order/addTip。
     */
    BaseResponse<AddTipResult> addTip(AddTip model);

    /**
     * 取消追加订单
     * <p>
     * 商户调用该接口取消已发布的追加订单,接口URL地址：/api/order/appoint/cancel
     * <p>
     * 被取消的追加订单，状态变为待接单，其他配送员可见
     */
    BaseResponse<CancelAdditionalOrderResult> cancelAdditionalOrder(CancelAdditionalOrder model);

    /**
     * 取消订单(线上环境)
     * <p>
     * 在订单待接单或待取货情况下，调用此接口可取消订单。注意：接单后1－15分钟内取消订单，运费退回。同时扣除2元作为给配送员的违约金
     * <p>
     * 接口调用请求说明，URL地址：/api/order/formalCancel
     */
    BaseResponse<CancelOrderResult> cancelOrder(CancelOrder model);

    /**
     * 妥投异常之物品返回完成
     * <p>
     * 订单妥投异常后，订单状态变为9，骑士将物品进行返还，如果商家确认收到物品后，可以使用该 接口进行确认，订单状态变成10，同时订单终结。
     * <p>
     * 接口调用请求说明，URL地址：/api/order/confirm/goods。
     */
    BaseResponse<CompleteTheReturnOfAbnormalItemsResult> completeTheReturnOfAbnormalItems(CompleteTheReturnOfAbnormalItems model);

    /**
     * 订单预发布
     * <p>
     * 订单预发布包含两个接口，接口简介如下：
     * 1、查询订单运费接口，接口URL地址：/api/order/queryDeliverFee。
     * 2、查询运费后发单接口，接口URL地址：/api/order/addAfterQuery。
     * <p>
     * 1.预发布订单的操作流程是：使用【查询订单运费接口】获取平台订单编号，调用【查询运费后发单接口】即可发布订单。
     * 2.【查询订单运费接口】经纬度为非必传参数，如果不传经纬度，系统会自动在city_code所在城市解析收货地址，所以此时接口中的city_code一定要传正确。
     */
    BaseResponse<OrderPreReleaseResult> qrderPreRelease(OrderPreRelease model);

    /**
     * 商家投诉达达
     * <p>
     * 达达配送员接单后，商家如果对达达服务不满意，均可以使用该接口对达达进行投诉。
     * <p>
     * 接口调用请求说明，URL地址：/api/complaint/dada
     */
    BaseResponse<QueryAdditionalDistributorResult> queryAdditionalDistributor(BusinessComplaintDada model);

    /**
     * 重新发布订单
     * <p>
     * 在调用新增订单后，订单被取消、过期或者投递异常的情况下，调用此接口，可以在达达平台重新发布订单。
     * <p>
     * 接口调用URL地址：/api/order/reAddOrder。
     */
    BaseResponse<ReAddOrderResult> reAddOrder(ReAddOrder model);

}
